﻿// --------------------------------------------------------------------------------------------------------------------
// <copyright file="ICommunicationHelper.cs" company="Dzakhov's jag">
//   Copyright © Dmitry Dzakhov 2012
// </copyright>
// <summary>
//   Интерфейс для взаимодействия с головой робота.
// </summary>
// --------------------------------------------------------------------------------------------------------------------

namespace RoboCommon
{
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    /// <summary>
    /// Интерфейс для взаимодействия с головой робота.
    /// </summary>
    public interface ICommunicationHelper
    {
        /// <summary>
        /// Gets Текст последней ошибки.
        /// </summary>
        string LastErrorMessage { get; }

        /// <summary>
        /// Gets Последнее успешно отправленное роботу сообщение.
        /// Сообщение, передаваемое методу SendMessageToRobot, может быть представлено в краткой форме.
        /// Числовое значение может отсутствовать или не содержать лидирующих нулей. После успешной отправки
        /// свойство LastSentMessage будет содержать это сообщение, представленное в полной форме.
        /// </summary>  
        string LastSentMessage { get; }

        /// <summary>
        /// Передать роботу сообщение.
        /// </summary>
        /// <param name="message">
        /// Текст сообщения.
        /// </param>
        /// <returns>
        /// true, если нет ошибок.
        /// </returns>
        bool SendMessageToRobot(string message);

        /// <summary>
        /// Передать роботу неповторяющееся сообщение.
        /// </summary>
        /// <param name="message">
        /// Сообщение, передаваемое роботу.
        /// </param>
        /// <param name="voidMessage">
        /// Сообщение с этим же идентификатором, но с "пустым" значением.</param>
        /// <returns>
        /// true, если нет ошибок.
        /// </returns>
        /// <remarks>
        /// Сообщения для управления моторами, например, повторяются постоянно, каждые несколько милисекунд.
        /// Потеря одного такого сообщения несущественно. А сообщения, например, смены настроения (мордочки)
        /// передаются по команде оператора. Потеря - пропуск команды. Поэтому сообщения повторяются 
        /// несколько раз. Особенность обработки сообщений на приёмной стороне (хэш таблица для исключения
        /// обработки абсолютно идентичных поступивших друг за другом сообщений) требует после команды смены
        /// настроения дать аналогичную команду с "пустым" значением.
        /// </remarks>
        bool SendNonrecurrentMessageToRobot(string message, string voidMessage);

        /// <summary>
        /// Передать роботу неповторяющееся сообщение.
        /// </summary>
        /// <param name="message">
        /// Сообщение, передаваемое роботу.
        /// </param>
        /// <returns>
        /// true, если нет ошибок.
        /// </returns>
        /// <remarks>
        /// Сообщения для управления моторами, например, повторяются постоянно, каждые несколько милисекунд.
        /// Потеря одного такого сообщения несущественно. А сообщения, например, смены настроения (мордочки)
        /// передаются по команде оператора. Потеря - пропуск команды. Поэтому такие сообщения повторяются 
        /// несколько раз.
        /// </remarks>
        bool SendNonrecurrentMessageToRobot(string message);
    }
}
